Đồng nghiệp của tôi đã tạo một bảng SQL 96 cột


23

Chúng tôi ở đây vào năm 2010, các kỹ sư phần mềm có 4 hoặc 5 năm kinh nghiệm, vẫn đang thiết kế các bảng với 96 cột fracking.

Tôi nói với anh ấy rằng đó sẽ là một cơn ác mộng.
Tôi đã cho anh ta thấy rằng chúng ta phải sử dụng các lệnh để giao diện MySQL với C #.
Tôi giải thích rằng các bảng có nhiều cột hơn hàng là một mùi rất lớn.

Tuy nhiên, tôi nhận được "Nó sẽ đơn giản hơn theo cách này".

Tôi nên làm gì?

CHỈNH SỬA *

Bảng này chứa dữ liệu từ các cảm biến.
Chúng tôi có cảm biến 1 với
Dynamic_D1X
Dynamic_D1Y
[...]

Dynamic_D6X
Dynamic_D6Y
[...]

EDIT2 *

Chà, cuối cùng tôi đã rời bỏ công việc đó. Đó là một dấu hiệu khi lập trình viên khác chìm trong nhiều tháng tại thời điểm đó, đó là một dấu hiệu khác khi quản lý không nhận ra đây là một vấn đề


5
Uggh, cũng có thể là thời kỳ đen tối. Khi nào mọi người sẽ học cách sử dụng cơ sở dữ liệu?
ChaosPandion

49
Sự thay thế của bạn là gì? Bạn không thể bực tức vì một vấn đề nếu bạn không có giải pháp.
TGnat

1
Tôi tò mò về những gì được lưu trữ trong mỗi hàng.
MetalMikester

1
@ChaosPandion, chỉ một thời gian dài sau khi sử dụng cơ sở dữ liệu truyền thống, bản thân nó đã có mùi thiết kế.
instanceofTom

3
Vâng, anh ấy rõ ràng quá mức cơ sở dữ liệu của bạn. Chúng tôi đã từng có một cơ sở dữ liệu với một bảng duy nhất chỉ có 4 cột varchar: LỚP, ĐỐI TƯỢNG, ATTRIBUTE, GIÁ TRỊ. Tất cả dữ liệu phù hợp trong đó. Đánh mà! :)
Lukas Eder

Câu trả lời:


32

Có lẽ anh ấy đã làm điều đó vì một lý do tốt, chẳng hạn như màn trình diễn hoặc ROI? .

Điều tốt nhất để làm, là hỏi anh ta câu hỏi. Với một lượng "tại sao" nhất định, bạn chắc chắn sẽ khiến anh ấy hiểu rằng anh ấy có thể tự sai (nếu anh ấy thực sự).

Bản thân tôi đã có một trường hợp không liên quan đến biểu diễn nhưng lợi tức đầu tư (ROI). Tôi đã có một bảng chứa các đối tượng có giá trị cụ thể cho mỗi giờ trong tuần (168h trong một tuần). Chúng tôi có lựa chọn tạo một bảng ObjectHour có chứa giá trị, nhưng cũng là một khóa cho Đối tượng và số ngày của số giờ. Nhưng chúng tôi cũng đã có cơ hội để đặt 168 giá trị ngay trong hàng. Có lẽ giống như những gì đồng nghiệp của bạn đã làm.

Các nhà phát triển ước tính cả hai giải pháp. Giải pháp đơn giản (168 cột) rẻ hơn rất nhiều so với đối tác được thiết kế tốt. Đối với kết quả chính xác cho khách hàng.

Chúng tôi quyết định tìm giải pháp đơn giản / rẻ nhất để tập trung nỗ lực vào những thứ quan trọng hơn như bảo mật.

Chúng tôi sẽ có nhiều cơ hội để cải thiện điều đó trong tương lai. Thời gian để thị trường là ưu tiên cho chúng tôi tại thời điểm đó.


3
Tôi đồng ý - không có ngữ cảnh bổ sung cho 'tại sao', số lượng cột thực sự không quan trọng. Có thể có 96 điều cần theo dõi một cách hợp pháp ... hoặc, anh ta có thể đang sử dụng các cột bổ sung cho 'mảng' dữ liệu (name_1, name_2) nên được chia thành các bảng khác.
GrandmasterB

Ồ, bạn làm tôi nhớ một điều ... Tôi sẽ thêm nó vào câu trả lời của mình

1
"Bình thường hóa" không nhất thiết có nghĩa là "được thiết kế tốt". Tôi sẽ xem xét sự không chuẩn hóa mà bạn mô tả ở đây, là một quyết định thiết kế hoàn toàn tốt.

1
Tôi hoàn toàn đồng ý với @GrandmasterB. Số lượng cột không phải là thứ có thể được đánh giá độc lập. Có những lúc rất nhiều dữ liệu liên quan phải được lưu trữ về một điều duy nhất. Mọi người nên làm gì? Tạo một bảng dữ liệu được gắn thẻ (id, tag, value)INSERTchín mươi hàng lẻ? Nếu thông tin thuộc về một bảng và được chứng minh thì cột vẫn ở đó, trừ khi nó gây ra vấn đề hiệu năng khủng khiếp.
Orble

+1 Không chuẩn hóa là cần thiết cho các ứng dụng nhất định. Tôi cho rằng cơ sở dữ liệu không phải là bảng tính. Chỉ vì chúng có định dạng bảng tương tự không nhất thiết có nghĩa là cơ sở dữ liệu phải có thể đọc được. Chúng là bộ lưu trữ dữ liệu phía sau và nên được xử lý như vậy.
Evan Plaice

17

Thật không may, nhà phát triển trung bình của bạn vẫn nghĩ về cơ sở dữ liệu quan hệ như các tệp phẳng lớn. Cách duy nhất họ sẽ trở nên tốt hơn là nếu ai đó chịu trách nhiệm và dẫn dắt bằng ví dụ. Gần đây tôi đã đi đầu trong một thiết kế lại chính của một lược đồ quan trọng trong cơ sở dữ liệu của chúng tôi và tuân theo các thực tiễn quan hệ phổ biến. Tất cả các thủ tục lưu trữ của chúng tôi đột nhiên thanh lịch hơn và tất cả các chỉ mục thích hợp dường như rơi vào vị trí giống như chúng được sinh ra cho nó. Nhà phát triển hướng bản ngã sẽ không bao giờ tin bạn nếu không có bằng chứng.


2
Đôi khi cần có bằng chứng để thuyết phục một người đã tin rằng họ đúng. +1
Chris

1
Có thật không? Các nhà phát triển trung bình làm điều này? Rất tiếc.
webbiedave

Có lẽ các tập tin phẳng lớn là những gì họ cần ở nơi đầu tiên;)?
Công việc

không nhất thiết là bản ngã, nhưng tại sao bạn nên thay đổi? Các công cụ mới phải tốt hơn rất nhiều để "trả tiền" cho thời gian và công sức bỏ ra để sử dụng nó.

-1 có những lý do hoàn toàn hợp lệ để sử dụng bảng dữ liệu không chuẩn hóa. Chẳng hạn, điều gì sẽ xảy ra nếu bạn cần bảo vệ nó trên nhiều máy chủ vì bộ dữ liệu tăng quá lớn hoặc bạn cần thời gian truy cập độ trễ cực thấp (nói lời tạm biệt với việc sử dụng các phép nối).
Evan Plaice

11

Một cái gì đó tương tự đã được thảo luận trước đây trên StackOverflow .

Nói chung, có nhiều cột trên bàn không nhất thiết có nghĩa là bạn đang làm gì đó sai, nhưng chắc chắn nên treo một số cờ đỏ để bạn nhìn kỹ vào thiết kế. Đôi khi một chiếc bàn khổng lồ là lựa chọn đúng đắn, nhưng trong nhiều trường hợp, các lựa chọn thay thế khác có ý nghĩa hơn. Ví dụ: một tùy chọn là chia lưu trữ thành hai bảng: một bảng xác định các thực thể của bạn và một bảng khác thực sự là kho lưu trữ khóa / giá trị của các thuộc tính mô tả các thực thể đó (vì vậy bạn có thể kết thúc với tối đa 96 hàngcho mỗi thực thể). Thiết kế khác là có thể là tốt. Nói chuyện với các đồng đội của bạn và tìm ra giải pháp nào tốt hơn tùy thuộc vào chuẩn hóa dữ liệu, khả năng đọc và bảo trì mã (chèn câu lệnh với 96 thuộc tính để điền vào?), Hàm ý hiệu suất, tần suất các thuộc tính mới (cột) có thể được thêm hoặc thay đổi, mức độ thưa thớt dữ liệu là (bao nhiêu trong số 96 cột sẽ được điền và bao nhiêu NULL vẫn còn?), và ý nghĩa về báo cáo. Bất kỳ nhà phát triển nào cũng có thể biện minh hợp lý cho các quyết định thiết kế của họ và cho thấy rằng sự đánh đổi chi phí / lợi ích (và vâng, mọi quyết định thiết kế là một sự đánh đổi) đều có lợi cho họ. Trách nhiệm của bạn không phải là phàn nàn hay chỉ trích, mà là đề xuất các giải pháp thay thế và đảm bảo rằng họ đã nghĩ thông qua những vấn đề này.


1
các cửa hàng giá trị quan trọng gần như là sự lựa chọn tồi tệ nhất cho sự hoàn hảo và khả năng kiểm tra.
HLGEM

8
Quan tâm đến công phu?
Yevgeniy Brikman

9

Được chuẩn hóa với 96 cột? Nó có đáp ứng NF 1, 2, 3 vv không?

Có thể là bạn có 96 thuộc tính riêng biệt cho thực thể.

Nếu không, hãy khiến anh ấy đọc Joe Celko trên Simple Talk


5

Nó hoàn toàn phụ thuộc.

Các thiết kế DB được chuẩn hóa / không chuẩn hóa đều có những ưu điểm và nhược điểm.

Thiết kế DB đầu tiên của tôi là một thứ bình thường của cái đẹp. Nó rất linh hoạt và có thể mở rộng. Nó cũng là một PITA đáng kinh ngạc cho bất cứ ai ngoại trừ bản thân tôi để giải quyết ở cấp độ mã, và đó là một PITA nhẹ đối với tôi.

Nỗ lực tiếp theo của tôi là một cấu trúc phẳng, và nó (a) nhanh hơn rất nhiều và (b) dễ mã hóa hơn rất nhiều. Và nó sẽ không phải là một việc lớn để bình thường hóa sau này.

Vì vậy, nó có thể là một mùi nhưng một số thiết kế DB khác sẽ có một mùi thú vị riêng của nó.


+1 Để chỉ ra rằng thường xuyên, không có một cách đúng đắn.
Orble

3

Để anh ta đọc bài viết này về nợ kỹ thuật . Nếu anh ấy vẫn quyết định giữ nó theo cách này, thì ít nhất bạn đã đưa ra một ý kiến ​​mang tính xây dựng.


1

Nhìn vào bài đăng (đã chỉnh sửa), rõ ràng đây là một bảng không chuẩn hóa. Những gì bạn nên làm? Như tôi thấy, bạn có một vài lựa chọn:

  1. Hét vào đồng nghiệp của bạn để học cách làm công việc của anh ấy / cô ấy. Không có khả năng làm việc hiệu quả nhưng có thể sẽ thuyết phục các đồng nghiệp khác không gây rối với bạn. Danh tiếng như một kẻ điên hét lên có thể hữu ích (đừng hỏi tôi làm sao tôi biết).
  2. Hét lên với ông chủ rằng đồng nghiệp là một thằng ngốc. Dự báo thảm họa, sau đó tích cực làm việc để phá hoại dự án. Đổ lỗi cho tất cả mọi thứ trên thiết kế cơ sở dữ liệu được sản xuất bởi đồng nghiệp bất tài. Có thể dẫn trực tiếp đến ...
  3. Thoát Tốt nhất nếu đó là ý tưởng của bạn, nhưng # 2 có thể dẫn đến sự từ chức không tự nguyện. Cố gắng không cạo đầu gối trên nhựa đường / bê tông / sỏi nếu bị ném từ cửa sổ bởi ông chủ và / hoặc đồng nghiệp giận dữ. (Lưu ý rằng nghiên cứu trước là QUAN TRỌNG ở đây. Cơ hội sống sót của bạn giảm rõ rệt nếu văn phòng ông chủ ở trên tầng trệt và bạn thấy mình bị đẩy ra ngoài cửa sổ. Hãy lên kế hoạch trước !! )
  4. Uống nhiều - hoặc, di chuyển đến California và sáng lên (giả sử prop 19 (hoặc bất cứ điều gì) đi qua). Không có gì giống như một vài bức ảnh và một doobie để cải thiện tầm nhìn của một người đối với đồng nghiệp của mình (hoặc vì vậy tôi đã nghe thấy). (Thông báo dịch vụ công cộng: KIDS! Những người này là chuyên gia! KHÔNG thử điều này ở nhà!)

Chia sẻ và tận hưởng.


Tôi đã thử # 4 nhưng bây giờ là thứ hai và mọi thứ sẽ trở lại khi tôi đến nơi làm việc =)
Eric

Đọc điểm một. Nâng cao. Đọc điểm hai, cởi bỏ upvote của tôi. Nghiêm túc đấy, anh bạn?
Zoran Pavlovic

0

Tôi sẽ đi ra ngoài một chi ở đây và cho rằng anh ta sẽ cắt và dán rất nhiều mã để làm việc với bảng "Mới" này.

Nếu vậy, bạn có thể sẽ không phải chịu thêm bất kỳ khoản nợ kỹ thuật nào. Anh ta chỉ chia phần nợ kỹ thuật của mình và có thể đang trên đường đến một sự thống nhất lớn nào đó của mọi thứ.

Nếu anh ta có một số phương pháp thử và thực sự đòi hỏi một điều 96 cột, hãy xem xét lợi ích thực tế của việc thực hiện nó theo một cách khác trong trường hợp cụ thể này. Nếu không có ai, thì hãy cho anh ta lợi ích của sự nghi ngờ, nhưng hãy nhắc anh ta rằng lần sau bạn muốn tham gia vào giai đoạn lập kế hoạch vào lần tới, anh ta sẽ làm những gì chúng ta coi là một bước đi khá ngu ngốc.


0

Phụ thuộc hoàn toàn vào các trường hợp sử dụng của ứng dụng sẽ truy cập vào lược đồ, khối dữ liệu nào là cần thiết tại một thời điểm. Theo một cách nào đó, nó có thể biện minh cho thiết kế bảng.


0

Tôi sẽ gửi anh ta đến thời kỳ đồ đá và buộc anh ta sử dụng các tập tin hoặc ít nhất là dạy anh ta cách sử dụng các đốm màu.

Thực sự, 96 màu ... Điều đó không thể đúng, bao giờ. Có lẽ một ORM sẽ giúp. (Trừ khi bạn cần hiệu suất nhưng sau đó bạn có thể có người hiểu DB tốt hơn để xử lý nó)


0

Tôi sẽ bị hạ bệ tất cả xuống địa ngục vì điều này, nhưng đây chính là lý do tại sao tôi tách biệt trách nhiệm của mô hình hóa dữ liệu và công nghệ phần mềm trong cửa hàng của mình. Các lập trình viên dường như hiếm khi nghĩ về các hình thức tập hợp và thay vào đó tập trung vào việc sử dụng dữ liệu (thay vì duy trì hình thức bình thường thứ 3, lập chỉ mục hoặc các vấn đề về hiệu suất DB khác). Chúng tôi với tư cách là lập trình viên cũng có xu hướng không đồng ý nhiều hơn với các quyết định kiến ​​trúc DB đó hơn là có thể, dựa trên sự thiếu kinh nghiệm của chúng tôi trong các vấn đề mô hình hóa / kiến ​​trúc dữ liệu thuần túy. IMHO, tôi thích rằng tôi có các kiến ​​trúc sư dữ liệu và người lập mô hình đưa ra các yêu cầu, xây dựng bảng / procs / v.v., và để lại việc xử lý các kết quả đầu ra cho tôi.

Mặc dù không biết lý do thực sự của thiết kế này (Tôi đã làm việc trên các cảm biến thời tiết có hơn 96 đầu ra số khác nhau = số lượng lớn các cột của bảng) ... điều này có vẻ giống như trút hơi vào vật nuôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.