2017-01-09 4 views
0

У меня возникла следующая проблема.Модель реляционной базы данных с реляционными таблицами?

Представьте реляционную базу данных с двумя таблицами, которые связаны:

Таблица пользователя

idUser | email  | otherColumns 
    ------ | ----------- | ------------ 
     1 | [email protected] | .... 

Таблица Билл

idBill | value | otherColumns 
    ------ | ------| ------------ 
     1 | 100$ | .... 

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

реляционная таблица Билл Пользователь

id  | idUser | idBill 
    ------ | ------ | ------------ 
    1  | 1  | 1 

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

Наконец, я хочу знать, существует ли какой-либо стандарт для создания этих отношений.

Спасибо.

+1

Не храните валюту в поле значений. Сделайте это поле числовым типом данных, а не текстовым типом данных. Это приведет к возникновению проблем позже, когда вы хотите сделать арифметику в этом столбце. – RiggsFolly

+1

Я каждый раз делаю это на основе отношения. Если это 1: N, я использую первый вариант с одним внешним ключом, если есть отношение M: N Я использую промежуточную таблицу. Я думаю, что нет необходимости создавать следующую таблицу, если это отношение 1: N. Вы должны выделить больше места, а следующая таблица для кого-то может затруднить чтение сложного дизайна базы данных. – Bulva

ответ

3

Да, существуют стандарты - или, вернее, существует целый ряд книг по дизайн базы данных, который говорит вам о принятой мудрости. Последнее, что я помню, было следующим: «Дизайн базы данных и теория отношений: нормальные формы и весь этот джаз» Кристофера Дж. Дата.

Ответ на ваш первый вопрос зависит от бизнес-домена. Это часто помогает обобщить систему в псевдо-языке, как это:

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

A счет идентифицирован синтетическим первичным ключом, имеет значение, имеет валюта, имеет xyz.

законопроект имеет ровно одинпользователя.

(или)

законопроект имеет один или болеепользователи.

(или)

Счет имеет ровно одинпользователя и что отношение имеет атрибуты х, у и г.

Если счет имеет ровно одного пользователя, вы добавляете «пользователь» в качестве внешнего ключа в таблицу счетов.Нет дополнительной информации для захвата.

Если у счета может быть более одного пользователя, вы создаете таблицу связывания/соединения с одной строкой для каждой комбинации пользователей/счетов.

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

+0

Хороший ответ @NevilleK Я куплю эту книгу. – Maik

+0

@Maik Оказалось, что если таблица равна последовательности объединений без потерь, где общие столбцы являются CK (ключи-кандидаты), то нормализация до 5NF никогда не скажет, что вы должны отменить эту таблицу обратно к ним. (Потому что таблица «удовлетворяет» «зависимость соединения», которая «подразумевается CK».) Здесь таблица Bill_User-plus-user-column без потерь распадается на Bill & Bill_User на общем CK, так что это такой случай. Ответ «зависит от бизнес-домена» является правильным, хотя его обоснование с точки зрения правил является неопределенным. Но вот почему книги написаны. – philipxy

0

мое предложение не создающие другую таблицу говорят «реляционная таблица Bill» отобразить таблицу счета и клиент .Он не выглядит хорошо использовать:

колонка Add «iduser» в «таблицы Билле», так вы можете легко присоединиться к billtable и клиентов таблицы:

таблица Билл

idBill | value  | otherColumns | iduser 
------ | ------ | ......  | .... 
1   |  100$  |    | 1 
1

Речь идет о вашем дизайне. Допустим, согласно нашему дизайну, one пользователь может иметь n счета и one счет должен принадлежать только one пользователям. Это означает, что мы должны иметь отношения 1-n. Представление этого в виде виртуальных таблиц зависит от того, какой тип отношений у вас есть. Для 1-n мы можем сделать это нравится:

Таблица Пользователь

idUser(PK) | email  | otherColumns 
------  | ------ | ------------ 
1    | [email protected] | .... 

Таблица Билл

idBill(PK) | value  | otherColumns | idUser(FK) 
------  | ------ | ------------ | ------ 
1    |  100$  | ....   | 1 
2    |  10$  | ....   | 1 

TableUser.isUser является PK и Unique. TableBill.idUser не входит в состав PK и not unique. Я предпочитаю, чтобы этот способ представлял 1-n, потому что не нужна еще одна таблица (еще одна операция join в запросах).

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

Таблица Пользователь

idUser(PK) | email  | otherColumns 
------  | ------ | ------------ 
1    | [email protected] | .... 

Таблица Билл

idBill(PK) | value  | otherColumns 
------  | ------ | ------------ 
1    |  100$  | ....   
2    |  10$  | ....   

реляционная таблица Билл Пользователь

idUser(FK)  |  idBill(FK) 
------   | ------------ 
1    |  1 
1    |  2 

В реляционной таблице idUser поле not unique, потому что мы должны позволить дублировать userid s (1-n). idBill должен быть unique, потому что один счет должен иметь только одного владельца. Также вы можете внести некоторые изменения в соответствии с вашими требованиями к дизайну относительно отношений identifying или нет.

Типы отношений: careerride

О конструкции выпуска (ER диаграммы): tutorialspoint

ER в таблицах: tutorialcup

+1

Отношения в модели ER не представлены ссылками на внешние ключи между таблицами, а объединением двух или более ключевых столбцов в таблице. В «пользователе счета реляционной таблицы» пара столбцов '(idUser, idBill)' представляет собой отношение ER. Ограничение FK от 'Bill_User.idBill' до' Bill.idBill' - это просто ограничение целостности. Также ваши ссылки относятся к учебникам низкого качества, я предлагаю читателям искать результаты на сайтах соответствующих учебных заведений. – reaanb

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