Какой тип данных выбрать и как реализовать его в сценарии (отношение «многие ко многим») - PullRequest
1 голос
/ 25 марта 2011

У меня есть форма, в которой пользователь должен выбрать большое количество объектов, используя флажки. Я думаю, чтобы сохранить каждый флажок как тип данных ENUM ('0', '1') в типе Facilities_table, а затем отобразить их в моем представлении так:

<?php
   $jacuzzi =  $facilities['jacuzzi'] == 1?"jacuzzi available":"jacuzzi not available";
?>

Интересно, это лучший способ ...

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 25 марта 2011

Я обычно использую столбец TINYINT (1) со следующим определением:

`MyBooleanColumn` TINYINT(1) UNSIGNED DEFAULT 0

Я не знаю, есть ли какое-либо преимущество в производительности для этого, но это позволило бы вам сделать более двух значений, это может быть до 255, поскольку TINYINT является байтом. Но я представляю, что для поля ENUM требуется более одного байта.

Тем не менее, если вы пытаетесь связать несколько facilities с несколькими users, возможно, что-то вроде этого в порядке?

CREATE TABLE `facilities_users` (
  `facility_id` BIGINT() UNSIGNED NOT NULL COMMENT 'foreign key -> facilities.id',
  `user_id` BIGINT() UNSIGNED NOT NULL COMMENT 'foreign key -> users.id',
)

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

1 голос
/ 25 марта 2011

Если ваша база данных поддерживает это, я бы предложил использовать тип данных BOOLEAN.

Если это MySQL:

BOOL, BOOLEAN

Эти типы являются синонимами для TINYINT (1).Нулевое значение считается ложным.Ненулевые значения считаются истинными:

- Обзор числовых типов

0 голосов
/ 25 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...