Дизайн базы данных отношения 1 к 1 - PullRequest
3 голосов
/ 07 мая 2010

Я проектирую свою базу данных неправильно, я должен это исправить, пока она в разработке?

Предполагается, что таблица "user" имеет связь 1.1 с таблицей "userprofile"

однако фактический дизайн таблицы «user» имеет отношение 1. * к таблице «userprofile».

Все работает! но должно ли это быть исправлено в любом случае?

Ответы [ 5 ]

3 голосов
/ 07 мая 2010

Сделай одну вещь

User Table 
   Userid(p)
   UserName
   othercol..

UserProfile 
   id(p)
   UserId(f) - and unique
   othercol..

надеюсь, что таким образом вы можете легко исправить isse

2 голосов
/ 07 мая 2010

Если это отношение 1: 1, и вы часто возвращаете записи из таблицы «user» и «userprofile» вместе, вы можете просто объединить их в одну таблицу.

2 голосов
/ 07 мая 2010

Сделать user_id в таблице user_profile уникальным и фиксированным.

1 голос
/ 07 мая 2010

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

Когда вы в первый раз вставляете дублированную запись в дочернюю таблицу, вы можете сломать много кода. Без уникального индекса шансы на вставку второй записи могут быть довольно высокими. Вы можете сказать, что вы будете контролировать это на уровне приложения, но это, как правило, плохой выбор, поскольку нет гарантии, что другие приложения, массовые вставки и т. Д. Не могут случиться так, чтобы обойти приложение. Очень важно как можно быстрее привести в порядок структуру базы данных. Плохой дизайн становится действительно трудно исправить, когда в базе данных много записей.

0 голосов
/ 07 мая 2010

@ pranay

User Table 
   Userid(p)
   UserName
   othercol..

UserProfile 
   id(p)
   UserId(f) - and unique
   othercol..

Это нормально, как вы это делаете (выше)? или ты это делаешь (ниже)?

User Table 
   Userid(p)
   UserName
   othercol..

UserProfile 
   id(p) <--- userid
   othercol..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...