2010-11-30 4 views
0

У меня есть 4 стола, суды, отделы, адреса и телефонные номера.sql нормализация

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

Я рассмотрел несколько подходов к этому, но не знаю, как лучше всего использовать?

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

b) Я рассмотрел вопрос о проведении FK суда в таблице деления и FK раздела в таблице адресов. Это означает дублирование значений деления для каждого суда в таблице разделов. Я тогда не уверен, что делать с телефонным столом.

c) Мое последнее, хотя должно было иметь единую таблицу ссылок, содержащую все остальные 4 таблицы FK. Это означало бы отсутствие репликации данных, но это означало бы много соединений, чтобы получить что-либо значимое, и, вероятно, будет громоздким в использовании.

Я уверен, что я не вижу здесь очевидного, но как лучше всего смоделировать эти таблицы?

Доступ к таблицам можно получить через CakePHP, но, возможно, мы оставим это с одной стороны на данный момент.

+0

Есть уже много вопросов SO и интернет-страниц на «noramlisation»! – 2010-11-30 13:39:25

+0

Прошу прощения, хотя люди пришли сюда, когда им нужна была помощь? У меня есть * чтение нормализации, поэтому я пытаюсь создать схему, которая не будет дублировать данные. Возможно, в следующий раз, когда вы зададите вопрос, люди скажут вам, что там уже много страниц! – Dave 2010-11-30 13:50:18

ответ

0

что вы описали это звезда схемы и это рекомендуется способ сделать это

court 1:m divisions 
divisions 1:m addresses 
address 1:m telephone 

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

+0

Спасибо за мысли, я думаю, что это больше похоже на суды 1: m дивизий, отделы 1: m адреса, отделы 1: m телефон.Я просмотрел звездные схемы и использовал таблицу фактов, а таблицы с несколькими измерениями очень похожи на мой вариант c выше. То, что мне тогда нужно сделать, - это связать строку из таблицы фактов с моей основной записью, так как основная запись должна ссылаться на суд, его разделение, адрес и номер телефона. Является ли этот способ, поскольку я не видел примеров, которые используют таблицу фактов таким образом? – Dave 2010-11-30 14:48:49

1

Если у вас будет менее 10 000 строк, считающих все комбинации четырех таблиц, я бы предложил только плоскую единую таблицу. Размер данных будет около 80 мегабайт, если размер строки составляет около 8 КБ. Большинство бесплатных или недорогих баз данных будут в значительной степени задерживать память, а стоимость ввода-вывода будет близка к нулю.

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

В таблице TypeList могут храниться типы судов, таких как State, Federal, Local, при этом значения вводятся значением TL_Table «Court». Список разделов будет храниться здесь с TL_Type «Division». Используя TL_Type, вы можете заполнить выпадающий список для ввода данных. Список типов для телефонных номеров может быть по вызову, факсу, первичной, приемной, клерку, sherrif и т. Д.

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

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