2012-02-16 4 views
0

Я проектирование структуры базы данных для рассылки Данные, которые я нужно записать, данные почты приемника:структура базы данных для рассылки

Поскольку данные почты приемник не предопределяют, это может вызвать проблемы : , например: часть приемника имеет имя, почтовый адрес, телефон нет в то время как другие имеют имя, дату рождения, почтовый адрес, пол и т.д. ...

So my design is like this: 
Table Receiver: 
PK: ReceiverID 
    AttributeID 
    DataID 

Table Attribute: 
PK: AttributeID 
    AttributeName 

Table Data: 
PK: DataID 
    DataContent 

A example of one receiver is: 
Receiver: 1 1 1 
Attribute: 1 mailAddress 
Data:1 [email protected] 

Receiver: 1 2 2 
Attribute: 2 Name 
Data:2 Tony 

Это вызывает проблемы, потому что я хочу для проверки типа и длины поля данных, что является лучшим дизайном базы данных? Извините за плохое описание, я бы уточнил, если вы в замешательстве. Спасибо большое.

ответ

1

Его невозможно по определению для определения типов данных для неизвестных атрибутов. Это то, как работают базы данных.

Насколько я понимаю, вы хотите, чтобы день рождения был столбцом DATETIME. (и, возможно, другие «специальные» типы данных для нескольких других атрибутов)

Я не могу поверить в невозможность предопределить доступные атрибуты - они ограничены. просто перейдите и определите список возможных атрибутов.

Лучшим дизайном базы данных было бы просто создать таблицу приемника, которая содержит все возможные поля и позволяет им быть NULL. Использование базы данных в качестве «общего хранилища» для произвольных атрибутов - это плохая практика, когда это не требуется.

ваш стол может выглядеть следующим образом:

CREATE TABLE maillist_receivers (
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(id), 
    email VARCHAR(128) NOT NULL, 
    firstname VARCHAR(128), 
    lastname VARCHAR(128), 
    phone VARCHAR(128), 
    birthdate DATETIME, 
    ... 
) 

И ваши данные могут выглядеть следующим образом:

id  firstname  lastname  email   phone  birthdate 
1  Max   Power  [email protected]  NULL  21.12.2012 
2  John   Doe   [email protected]  555-1234 NULL 
  • Он работает лучше
  • типы данных хорошо определены
  • Вы может проверить ваш код приложения, если значение NULL и обрабатывать его соответствующим образом. (Например: не отправлять поздравительную открытку, ..)
  • он чист - вы можете прочитать простые данные в браузере базы данных
+0

Спасибо и проблема: потому что это система для другого пользователя так что, например, Атрибут телефона предназначен для пользователя A, а дата рождения - только для B – user782104

+0

. Это приведет к большому количеству нулевой записи, если у пользователя много приемника, но ему нужен только атрибут электронной почты. , например. id 1 null null [email protected]est.com null null Будет ли это проблемой? – user782104

+0

Я не вижу проблемы с этим. – Kaii

Смежные вопросы