2008-11-27 35 views
13

Tôi hiện đang phát triển một ứng dụng PHP đang sử dụng cơ sở dữ liệu Access làm phụ trợ. Không phải bởi sự lựa chọn bạn hiểu ... cơ sở dữ liệu là những gì khách hàng sử dụng ban đầu và sử dụng nó là một phần của yêu cầu.

Một trong những vấn đề với cơ sở dữ liệu này là các tên cột có quy ước đặt tên điên rồ nhất mà bạn có thể tưởng tượng. Chữ hoa, chữ thường, dấu gạch dưới, dấu cách và chữ thường. Ví dụ: cột "giới tính" chứa ngày. Và do đó, cột "User2". Có nhiều hơn nhưng bạn có được ý tưởng.

Đối mặt với điều này, tôi quyết định tạo một mảng để ánh xạ các cột cơ sở dữ liệu với các biến PHP để chúng ta có thể tách mã khỏi sự điên rồ. Tuy nhiên đồng nghiệp của tôi tin rằng tôi đang quá phức tạp và chúng ta nên sử dụng tên cột của cơ sở dữ liệu cho các biến PHP tương ứng vì vậy chúng ta không cần phải đi qua mảng bản đồ để tìm những gì diễn ra.

Vì vậy, câu hỏi của tôi là điều này ... tôi đang làm điều đúng hay tôi làm phức tạp mọi thứ?Trên K.I.S.S và lát đường đi bộ

+1

+1 cho "giới tính" giữ ngày – inspite

+0

+1 Tương tự như trên. Kỳ lạ nhất! – Ace

Trả lời

20

Tuyệt đối bạn đang đi đúng hướng. Nếu bạn không trừu tượng hóa sự điên rồ, cuối cùng bạn sẽ không chống lại bản thân điên rồ.

Đồng nghiệp của bạn có điểm hợp lệ, vì vậy tôi khuyên bạn cũng nên viết mã một cách dễ dàng để xác định dữ liệu để ánh xạ cột trong PHP.

Đây không phải là giữ nó đơn giản, đó là về việc trang bị thêm một nền tảng vững chắc để xây dựng dựa trên. Điều này khiến tôi lo ngại là kiểu thiết kế ngẫu nhiên này thường che giấu các quy tắc kinh doanh nhất định, những thứ như "... nếu giới tính là ngày thì họ phải mua một tiện ích tại một thời điểm nào đó, vì vậy họ không thể được phép trêu chọc lubdub ... "- điên tôi biết nhưng phổ biến hơn nó nên được.

+1

+10 nếu tôi có thể. Không đưa vào sự điên rồ, nếu không mã của bạn sẽ được viết một lần, đọc không bao giờ. "Vì vậy, có biến $ dd, trong một số trường hợp có chứa địa chỉ người gửi, nhưng trong các trường hợp khác khoản thanh toán đến hạn. Số tiền này được xác định bằng số chấm trong biến $ punt. " (ví dụ thực tế (ya rly!)) – Piskvor

+1

+1 cho "fribbish the lubdub" –

5

Tên là đặc biệt quan trọng. Nếu bạn muốn ứng dụng của mình có thể duy trì, hãy sửa chúng trước khi cơ sở mã phát triển hơn nữa.

1

Đây là câu hỏi hay vì nó nói đến trái tim của IMHO mã hóa.

Tôi sẽ đi với bạn và trừu tượng ra những cái tên xấu thành những cái tên có thể đọc được. Kết quả là một chút phức tạp cho nhiều hơn mã dễ hiểu và dễ hiểu hơn về mặt logic.

3

Để chơi Người bảo vệ của Devil, có điều gì đó cần phải nói vì không có một lớp không cần thiết của sự gián đoạn trong tải bộ nhớ ngắn hạn của bạn để làm việc với hệ thống. Khi đã quen thuộc với mã, bạn sẽ biết những gì diễn ra trong biến số nào, do đó, lợi ích chính là để ai đó mới nhặt mã từ đầu. Tuy nhiên, khắc phục vấn đề đó đúng cách cũng sẽ yêu cầu sửa chữa lược đồ cơ sở dữ liệu mà (a) là một cơ quan quan trọng của công việc, và (b) phần lớn làm cho vấn đề biến mất.

Không có câu trả lời đen trắng cho câu hỏi này và việc thiếu câu trả lời rõ ràng cho vấn đề cụ thể của bạn cho thấy rằng bạn có thể muốn để chó ngủ nói dối.

Mặt khác, nếu hoạt động dọn dẹp nằm trong giới hạn khả năng thì bạn có thể muốn thực hiện trên cơ sở loại bao thanh toán lại, từng bước sửa các tên cột DB khi có cơ hội.

+0

Nó thực sự phụ thuộc vào ứng dụng lớn như thế nào, có hay không bạn có thể giữ tất cả những mâu thuẫn trong đầu của bạn. – Kibbee

+1

Cách điên rồ này nằm, một khi ứng dụng phát triển vượt ra ngoài đồ chơi. Một khi tôi bắt đầu một dự án bắt đầu như thế: "bạn sẽ biết cái gì đi theo biến nào" .Tại thời điểm tôi bước vào, nó đã phát triển thành "không ai biết nó làm gì, đừng chạm vào". Bugs mất vài phút để sửa chữa mất giờ, thậm chí cả ngày để tìm. – Piskvor

+0

Đồng ý. Ở mức độ phức tạp nhất định, bạn thực sự cần phải có một hệ thống được tổ chức tốt để có thể hiểu được nó. – ConcernedOfTunbridgeWells

1

Bạn không nói rằng bạn không thể đổi tên các cột trong Access, do đó .... làm điều đó! Một khả năng khác là tạo các khung nhìn cho mỗi bảng và đổi tên các cột trong khung nhìn. Sau đó thay vì làm việc với bảng Employees, bạn làm việc với view vEmployees. Nếu tôi nhớ chính xác, Access cho phép bạn cập nhật lượt xem cũng như chọn từ chúng.Nếu bạn đang sử dụng ORM với PHP, điều đó có thể không hỗ trợ cập nhật lượt xem.

+0

Xin lỗi, quên làm rõ .. Cơ sở dữ liệu Access không thể thay đổi. –

+0

Không nghĩ như vậy ... sau đó tôi đề nghị bạn thử xem cách tiếp cận. – RedFilter

1

mã hóa cứng các tên bảng và tên cột không bao giờ là một ý tưởng tốt ngay cả khi những cái tên có ý nghĩa.

Tôi không biết liệu việc sử dụng mảng có phải là giải pháp tốt nhất hay không. Tôi không thực sự quen thuộc với PHP nhưng tôi đã đi với một cái gì đó giống như chuỗi liên tục để lưu trữ các tên bảng. Trong các ngôn ngữ tôi làm việc trong điều này sẽ dẫn đến mã dễ đọc hơn.

1

Bạn đang rất không may mắn khi bị mắc kẹt với cơ sở dữ liệu này nhưng tôi nghĩ về toàn bộ cách trừu tượng hóa các tên trường thành một cái gì đó hợp lý hơn là thông minh hơn.

Tôi có lẽ sẽ tạo cấu trúc dữ liệu có chứa tên cơ sở dữ liệu, tên, loại và trường cho nội dung khi bạn kéo dữ liệu ra khỏi DB. Điều đó sẽ cho một cách thuận tiện để vẽ mọi thứ lại với nhau để bạn không chỉ chỉ ánh xạ lược đồ tên điên rồ.

1

Tuyệt đối bạn đang làm đúng. Theo tôi thì tốt hơn là nên thực hiện một số điều tỉnh táo ở đó. Về sau, bạn sẽ không bị vứt bỏ nếu họ quyết định thay đổi cơ sở dữ liệu đó hoặc bất kỳ tên cột nào của nó. Nếu bạn xây dựng bản đồ đúng cách, bạn chỉ cần cắm các bảng/cột mới ngay.

Nếu có gì, bạn đang làm cải thiện sự nhanh nhẹn của giải pháp tổng thể của bạn.

Tất nhiên tôi vẫn sẽ nói KISS áp dụng cho phương pháp lập bản đồ của bạn!

1

Sử dụng tên cột thích hợp trong phần cuối của ứng dụng là cách tốt nhất bạn có thể làm. Và bạn nên làm điều đó trừ khi bạn muốn phải tìm kiếm "những gì lĩnh vực đó được cho là một lần nữa?" khi bạn phải nhìn vào nó một lần nữa sau khi bạn đã làm một cái gì đó khác.

Điểm của đồng nghiệp của bạn không phải là quá phức tạp. Điều đó cũng hợp lệ.

Vì vậy, hãy đóng gói quyền truy cập vào các trường trong một phương thức hoặc phương pháp và có phương pháp đó thực hiện việc dịch. Sử dụng bản đồ này không phải là một vấn đề hiệu suất.

Thực tế việc đặt tất cả ánh xạ tới nguồn dữ liệu trong một đối tượng có thể giúp bạn nếu khách hàng của bạn xem xét lại sử dụng cơ sở dữ liệu thực. Và khách hàng thích thay đổi ý kiến ​​của họ.

1

Tại sao không tạo bảng dữ liệu với các lớp bản đồ trên mỗi bảng. Sau đó, bạn có thể định nghĩa các phương thức lớp để truy cập các cột và cung cấp các phương thức cho bất kỳ tên nào bạn muốn. Sau đó, mã truy cập cơ sở dữ liệu datalayer là điều duy nhất cần biết về các tên cột thực. Tôi nghi ngờ rằng một người nào đó (có lẽ một số soneone) đã phát triển một khuôn khổ để làm điều này. Google "php orm".

2

Chỉ cần tạo chế độ xem ở nơi cần thiết nhất.

0

Sử dụng ORM, bạn sẽ sớm thay đổi db ...

0

Bạn vẫn cần duy trì cơ sở dữ liệu. Một cách tiếp cận có thể tôi có thể đề nghị là ánh xạ các tên trường trong mã ứng dụng khi bạn định làm nó.Nhưng sau đó sớm hay muộn bạn phải bắt đầu xử lý sự điên rồ này với tên trường và sửa nó. Nó không phải là ý tưởng tốt chỉ để màn hình từ một vấn đề và tưởng tượng rằng nó là một giải pháp an toàn và cách tốt để đi. Đó chỉ là giải pháp tạm thời. Đừng tự hỏi về nó.

+0

Đúng. Kế hoạch ở đây là để cuối cùng có được khách hàng để có được truy cập và cho chúng tôi di chuyển tất cả các dữ liệu đến một cơ sở dữ liệu phong nha, nơi chúng tôi có thể viện một lược đồ hơi điên ít hơn. –

Các vấn đề liên quan