Tôi thường thấy mình đang đặt câu hỏi liệu mình có đang sử dụng đúng cách để cố gắng lên kế hoạch mở rộng trong tương lai khi tạo cơ sở dữ liệu và quan hệ hay không.Tại điểm nào, việc chuẩn hóa dữ liệu trở nên lố bịch?
Tôi có tình huống sau đây:
Tôi có một bảng
Donor
và một bảngRecipient
. Cả hai bảng chia sẻ thông tin phổ biến nhưfirst_name
,last_name
,email_address
,date_of_birth
, v.v. Cả hai dường như, nếu bạn sẽ tha thứ ngôn ngữ hướng đối tượng của tôi, hãy chia sẻ một loại trừu tượng chung làPerson
. Có thể người nào đó ở một thời điểm làRecipient
sau này có thể trở thànhDonor
bằng cách tặng tiền, vì vậy điều quan trọng là thông tin không được sao chép trên các bảng. Tôi có nên chọn kiểu mẫu thừa kế hay tôi chỉ cần nhập khóa ngoàiDonor
s vàRecipient
s vào bảngPerson
? Ban đầu, tôi đã nghĩ đến việc đơn giản hóa các thuộc tính nhưemail_address
và các thuộc tính địa chỉ đường phố trực tiếp vào những thứ cần chúng, nhưng khả năng có thể xảy ra là một người sẽ có nhiều địa chỉ email hoặc địa chỉ gửi thư (ví dụ: nhà riêng, công việc, v.v.) Điều đó có nghĩa là chúng tôi có một mô hình hơi giống như thế này:create table person(id int primary key auto increment, ..., default_email_address); create table email_address(id int primary key auto increment, email varchar(255), name varchar(255), is_default bool, person_id int);
Điều này làm cho mọi thứ trở nên phức tạp, như bạn có thể tưởng tượng. Trường
name
cũng bao gồm danh sách các giá trị mặc định cũng như cho phép nhập tùy chỉnh. Tôi không thể chỉ là một lĩnh vực enum, bởi vì khả năng tồn tại là ai đó sẽ có rất nhiều email để thêm rằng tất cả có thể khác nhau ... (đây là điểm mà tôi hét lên "IS IT EVEN WORTH IT ANYMORE !?!? "và cảm thấy thất vọng với dự án)
Tôi đoán điều này thực sự nhấn mạnh như sau: tại điểm nào bình thường hóa dữ liệu trở nên lố bịch? Mục tiêu của tôi ở đây là tạo ra một mô hình dữ liệu tương thích với khả năng tương thích tốt mà tôi sẽ không tự tạo ra sau này.
Trong # của bạn 2, những gì sẽ là sự thay thế cho bình thường hóa dữ liệu? Bạn gần như chắc chắn không muốn nhiều giá trị cho một trường duy nhất trong một hàng, vì vậy tôi không thấy một thay thế nào để tách ra thành một bảng khác. –