Похоже, у вас есть обязательное отношение 1: 1 к MemberID и всем атрибутам, что означает, что вы можете хранить их все в одной таблице (memberprofile).Это значительно облегчит кодирование.
Знайте, что трудно обеспечить истинные отношения 1: 1, но это можно сделать с помощью триггеров.Посмотрите на вопросы с тегом [database-design].Есть два недавних вопроса об отношениях 1: 1.
У меня есть некоторые комментарии к идентификаторам.Если вы используете дополнительные таблицы для параметров участника, информации для входа и т. Д., Вам следует удалить ключи из MemberProfile и вместо этого использовать MemberID в этих таблицах, ссылаясь на MemberProfile с внешним ключом.Это позволит вам использовать эти таблицы напрямую, без присоединения к memberprofile.
Примерно так:
create table memberprofile(
member_id
,membertype_id
,primary key(member_id)
,foreign key(membertype_id) references membertype(membertype_id)
);
create table profile_settings(
member_id
,some_setting
,other_setting
,primary key(member_id)
,foreign key(member_id) references memberprofile(member_id)
);
Теперь, когда я думаю об этом, я думаю, что AboutMeID не 1: 1.Вы имеете в виду ссылку на сообщение на форуме, сделанное пользователем, чтобы представиться?В этом случае это будет 1: 0 кардинальности, потому что вам обычно нужно зарегистрироваться перед созданием сообщения:)
Вы можете реализовать это как столбец NULLable в MemberProfile или как отдельную таблицу с member_id в качестве первичного ключа и идентификаторасообщения форума.Если вы ожидаете, что большинство строк в итоге получат значение, я бы лично выбрал столбец, который можно обнулять.
Использовать ли одну или несколько таблиц для ваших (1: 1) атрибутов - выбор реализации.В зависимости от ваших шаблонов запросов, это может повлиять на производительность, хорошую или плохую.