2013-02-19 3 views
0

Скажем, я делаю телефонную книгу.Должен ли класс и таблица быть идентичными друг другу или должен быть получен класс из запроса?

класса Друзья

  • -> FirstName
  • -> LastName
  • -> Город
  • -> Государственный
  • -> ZIP
  • -> Телефон

Из того, что я понимаю, это для меня лучше всего иметь две таблицы в моей базе данных, хотя для чего-то вроде этого с FirstName, LastName, Phone в одном и адресной информацией в отдельной таблице, затем используйте ForeignKey для их соединения. Таким образом, если двое друзей живут по тому же адресу, я не повторяю никакой информации.

Должен ли я настраивать класс с помощью запроса INNER JOIN?

я не остановился на рамках в этой точке, так что если вы могли бы также сказать мне:

В CakePHP я был бы в состоянии использовать INNER JOIN для создания класса или же, что идти против конвенции? Если бы мне не было лучше, если бы я использовал другие структуры, такие как Laravel, Zend, Yii, Symfony или CodeIgniter?

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

+0

Рекомендую прочитать [нормализация] (http://en.wikipedia.org/wiki/Database_normalization). Затем читайте [когда denormalize] (http://stackoverflow.com/questions/4301089/when-to-denormalize-a-database-design). Тогда у вас будет все тот же вопрос :) –

+0

Спасибо, я прочитал некоторые из них и обязательно прочитаю больше, особенно если у кого-то есть рекомендация по книге. Но мне все равно хотелось бы узнать больше о том, как планировать мои таблицы для использования в классе и структуре. – Ryan

ответ

1

Это для меня спорный случай нормализации. Да, теоретически вы могли бы сэкономить себе избыточные записи, указав нормализованный адрес, но я бы действительно подумал о том, как вы собираетесь обрабатывать адреса в системе до принятия этого решения. Являются ли адреса всегда собственностью пользователя (отношения один к одному), или вы намереваетесь фактически иметь какое-то управление адресами, где пользователь может иметь несколько адресов? В первом случае я, вероятно, не нормализуюсь, тогда как в последнем случае я определенно буду.

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

+0

Да, человек может иметь несколько мест, например, компанию, которая имеет два разных офиса. Я отредактирую свой вопрос, чтобы прояснить это. – Ryan

+0

Используете ли вы «нормализацию» как синоним «разложения таблицы»? В случае «один-к-одному» я не вижу, когда данные разложения и данные адреса выполняют любую нормализацию вообще. –

+0

@WalterMitty «Нормализация» - это термин, обычно используемый для организации таблиц в базе данных, так что данные не дублируются избыточным образом. Этот процесс нормализации обычно включает в себя рассмотрение того, как разделять данные в большой таблице на несколько меньших таблиц, которые выражаются между ними в терминах внешнего ключа. –

0

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

Если вы собираетесь переходить на несколько таблиц, вы, скорее всего, придерживаетесь одного класса и выполняете соединение.

+0

Я отредактировал вопрос, основанный на ответах - да, человек может быть связан с несколькими адресами. – Ryan

0

Таким образом, если два друга живут по тому же адресу, я не повторяю никакой информации.

Для «точных» данных, которые могут быть точными, но адресами tend to be "fuzzy". Люди будут выражать их по-разному, а иногда и ошибаться - если это произойдет, какой адрес вы должны использовать: тот, который уже находится в базе данных или в новой? Как бы вы даже знали, что они на самом деле одни и те же, а какие - с ошибками?Вероятно, лучше «изолировать» адреса, чтобы любые ошибки или варианты оставались «локальными» для человека, с которого они возникли.

На более философской ноте: если вы идете так, почему бы не «нормализовать» улицы, города, города, страны или даже (наземные) телефонные номера? Вы можете сделать это с помощью «точных» данных, но для адресов, пытаясь довести эту концепцию до крайности, вы просто сделаете всю систему хрупкой.

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

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