Консолидация данных из столбцов разных задач проектирования таблиц - PullRequest
1 голос
/ 03 июня 2009

У меня есть 2 таблицы: таблица членства и таблица списка рассылки.

[Members] 
Username
Password
EmailAddress
MailingListOptIn [bit]
Planes [bit]
Boats [bit]
Cars [bit]
  • Столбцы с фруктами являются пользовательскими настройками.

и

[MailingList]
EmailAddress
MailingListOptIn
  • Mailinglist'er может выбрать получение новостных рассылок, но не обязательно быть участником

Я хотел бы начать хранить настройки для рассылок. Мой вопрос заключается в том, что было бы лучшим способом объединить эти 2 таблицы данных?

Я экспериментировал с таблицей участников, хранящей только информацию об участнике, например, имя пользователя, пароль и т. Д., И отдельной таблицей профилей, в которой хранятся адрес электронной почты и настройки. И члены, и настройки списка рассылки могут быть сохранены в этой таблице профиля, но я не могу добавить ограничение FK, тогда я не могу добавить список рассылки.

Так что сейчас мои варианты:

  1. Придерживайтесь 2 таблиц, но добавьте дубликаты столбцов "предпочтений" в таблицу списка рассылки.
  2. Используйте таблицу одиночных профилей и винтовую ссылочную целостность.

А может, есть другой лучший способ?

Ответы [ 2 ]

1 голос
/ 03 июня 2009
CREATE TABLE Profiles (
 Username
 Password
 EmailAddress
 MailingListOptIn [bit]
 Planes [bit]
 Boats [bit]
 Cars [bit]
);

CREATE VIEW Members AS
  SELECT * FROM Profiles WHERE Username IS NOT NULL
  WITH CHECK OPTION;

CREATE VIEW MailingList AS 
  SELECT EmailAddress, MailingListOptIn, Planes, Boats, Cars
  FROM Profiles WHERE Username IS NULL
  WITH CHECK OPTION;
0 голосов
/ 03 июня 2009

Я бы сделал это так:

i) таблица «person» с адресом электронной почты в качестве ключа

ii) таблица «member», только записи в этой таблице будут иметь только участники, связанные с «person» адресом электронной почты (также ключ в этой таблице)

iii) таблица "mailingList", имеющая уникальный идентификатор для mailingList, описание и, возможно, другие поля

iv) таблица «mailingListSubscriber» (отношение) с адресом электронной почты человека и идентификатором списка рассылки.

Извините за добавление таблиц, но я думаю, что это минимальная настройка для адекватной нормализации с учетом требований.

...