|
|
|
| Почитал, вообщем, создал вот такую таблицу с полями
CREATE TABLE `katalog`.`katalog` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`katname` TEXT NOT NULL ,
`filename` TEXT NOT NULL ,
`opisanie` TEXT NOT NULL ,
`data` DATE NOT NULL
) ENGINE = MYISAM ;
Думаю будет достаточно 5-ти полей,: id файла, название категории, название файла, описание файла, и дата.
Пожалуйста, поправьте, что я не так сделал, и если можно, с объяснением ошибок :) Спасибо.
Что то мне кажется, что вместо типа TEXT надо было делать VARCHAR ()?
Кто не в теме, чтобы не пересказывать предъисторию, здесь http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=81543&page=1 начало этой темы. :) | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 15:44)
| | `katname` TEXT NOT NULL ,
`filename` TEXT NOT NULL ,
лучше использовать VARCHAR
`data` DATE NOT NULL
лучше всетаки DATATIME | |
|
|
|
|
|
|
|
для: Valick
(09.07.2011 в 15:52)
| | Я так понимаю это для года издания предназначалось, если да, то лучше вообще YEAR (год), если это дата добавления записи, то да, лучше DATATIME. А лучше вообще две записи иметь - одна дата добавления/изменения, другая - год издания. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 15:55)
| | как то даже и мысли не возникло что речь о книгах
где авторы? издательство? | |
|
|
|
|
|
|
|
для: Valick
(09.07.2011 в 16:07)
| | Я не думаю, что первый проект нужно начинать с грандиозной базы данных, масштабируемой от локального компьютера до сети библиотек :))) Лучше последовательно двигаться, сначала разработать небольшую базу-хранилище, просто на замену файлам, а потом уже итерационно усложнять систему. Лучше издательства и т.п. вещи пока отложить (тем более речь идет об электронных книгах - там издательство не всегда еще найти возможно, да и смысла в нем не очень много, важнее реализовать быструю и удобную систему регистрации книги и поиск по названию). Т.е. на фичи пока лучше не отвлекаться, а переосмыслить их после первой версии каталога. | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 15:44)
| | Для начала неплохо, но лучше если вы создадите две отдельные таблицы, одна будет хранить названия каталогов, а другая книг, которые содержат эти каталоги. Для того, чтобы знать какому каталогу принадлежит книга во второй таблице заведите поле id_catalog, которое будет хранить значение id таблицы katalog. Т.е. таблица для каталогов
CREATE TABLE `katalog`.`katalog` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`katname` TEXT NOT NULL
) ENGINE = MYISAM ;
| и таблица для книг
CREATE TABLE `katalog`.`books` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`filename` TEXT NOT NULL ,
`opisanie` TEXT NOT NULL ,
`data` DATE NOT NULL,
`id_catalog` INT
) ENGINE = MYISAM ;
| PS Потом, если вы захотите сделать вложенные каталоги или, чтобы одна и та же книга была в нескольких каталогах - вам будет проще. Да и логично, когда одна таблица хранит данные по одной сущности - т.е. каталоги у нас в одной таблице, книги - в другой, захотите ввести авторов - лучше под них завести третью таблицу. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 15:53)
| | Спасибо, вникаю.
Я так понимаю, это и есть что то типа реляционных баз данных, только в простом варианте? | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 16:08)
| | Да, совершенно верно. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 16:16)
| | И еще вопросик, наверно немного забегая вперед.
А как будет попадать id каталога в таблицу books? Я так понимаю, при добавлении книги, будет выбран каталог(и), в которые надо добавить книгу, а катологу присвоен соответственно уникальный id в таблице katalog.
Вопрос, а как это будет выглядеть в коде php? Если рано спрашиваю, можно не отвечать :) | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 17:09)
| | >Я так понимаю, при добавлении книги, будет выбран каталог(и), в которые надо добавить книгу, а
>катологу присвоен соответственно уникальный id в таблице katalog.
Тут два подхода, либо вы заходите в каталог и добавляете книгу, а каталоги и их страницы друг от друга отличаются каким-то признаком, например GET-параметром в адресной строке index.php?id=4 (где id - это значение поля и таблицы katalog), тогда вам просто останется взять это значение-признак (из элемента глобального массива $_GET['id'] и подставить в запрос). Второй подход связан с выбором каталога из выпадающего списка, тут совсем все просто - данные вам в обработчик формы свалятся вместе с названием книги, её файлом (или путем к ней) и вы его подставите вместе с остальными данными в запрос. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 17:18)
| | Спасибо :) Ну это потом, пока с базой мудрю.
Вы написали, что все же мне надо TEXT заменить на VARCHAR, или я не правильно понял, или так и есть, VARCHAR подразумевает же не более 255 символов в ячейке, если так, то как быть, если нужно больше? | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 17:27)
| | Это помоему Valick вверху посоветовал... не знаю, как хотите, VARCHAR - он более стандартен и используется на всех базах данных, TEXT - это особенность MySQL. Однако, сейчас на это можно не заморачиваться, все-равно базу менять нужно прилично при переносе с одной СУБД на другую. Вообще конечно TEXT - это BLOB (тип для хранения бинарной информации), заточенный под текстовые задачи.
>я не правильно понял, или так и есть, VARCHAR подразумевает же не более 255 символов в
>ячейке, если так, то как быть, если нужно больше?
Его максимальные размер 65535 символов, как и TEXT (и помоему всегда таким был, 255 - это максимальное количество индексируемых символов, тем более сейчас это значение увеличено до 1000). Понятно, что если явно ограничить количество VARCHAR(255), то больше 255 символов не влезет, но вместо 255 можно написать побольше.
Мне именно поэтому типы TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT больше нравятся - из названия сразу понятно, сколько примерно текста убирается в столбце и цифры писать не нужно. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 17:39)
| | Все понятно по VARCHAR, значит я немного попутал :) извиняюсь.
Кстати, не могу разобраться, как тут просто сообщение написать в тему. Нет такого варианта. Есть только ответить. Вот и отвечаю последнему написАвщему :) | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 17:44)
| | ответить можно не только последнему, но и самому себе (на самый первый пост) это и будет "в тему" | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 17:44)
| | >Кстати, не могу разобраться, как тут просто сообщение написать в тему. Нет такого варианта.
>Есть только ответить. Вот и отвечаю последнему написАвщему :)
Ответьте на свой первый пост (или любой другой пост из ветки) и начнется новая ветка... собственно, это изначально сделано, чтобы видеть кому предназначается ответ и не поощрять очень длинные темы. Идеальная тема - вопрос-ответ, поэтому и приветствуется каждая новая тема под ответ, чтобы старые темы не разростались. На форуме есть линейный вариант (кнопки "вид форума" справа вверху) - там есть постраничная навигация и линейное отображение от новых к старым или от старых к новым. Однако, по умолчанию, используется лестничный вариант, чтобы видеть кто кому отвечает. | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 15:44)
| | И так, исходный вариант получился:
CREATE TABLE IF NOT EXISTS `books` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`filename` varchar(1000) NOT NULL,
`opisanie` varchar(3000) NOT NULL,
`data` year(4) NOT NULL,
`datebook` datetime NOT NULL,
`id_catalog` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `katalog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`katname` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Как думаете, все верно сделал? Или можно еще чего изменить в лучшую сторону? | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 18:54)
| | Собственно совершенствовать систему можно по мере разработки, думаю уже можно начинать заполнять каталог.
PS В таблицу books хорошо бы еще добавить одно поле для названия книг - по описанию будет довольно сложно ориентироваться, когда вы будете выводить список всех книг на странице - название нужно как-то выделять, будет удобно, если оно будет храниться отдельно от описания. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2011 в 19:15)
| | Ясно, спасибо. | |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 19:44)
| |
CREATE TABLE IF NOT EXISTS `books` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`filename` varchar(1000) NOT NULL,
`opisanie` varchar(3000) NOT NULL,
`data` year(4) NOT NULL,
`datebook` datetime NOT NULL,
`id_catalog` int(11) DEFAULT NULL,
`bookname` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
|
| |
|
|
|
|
|
|
|
для: Артурыч
(09.07.2011 в 19:48)
| | >
> `filename` varchar(1000) NOT NULL,
> `opisanie` varchar(3000) NOT NULL,
>
|
Максимальное кол-во значений в varchar 255. Используйте тип TEXT | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(11.07.2011 в 10:53)
| | Максимальное количество символов в VARCHAR - 65535, такое же как в TEXT. | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(11.07.2011 в 10:53)
| | с некоторых пор уже нет ;)
а вот имя файла в 1000 символов это конечно круть :) | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 11:02)
| | Если вместе с путем хранится, то почему бы и нет... кроме того тип поля динамический, т.е. можно и максимальное значение 65535 написать - места таблица будет занимать столько же. | |
|
|
|
|
|
|
|
для: Valick
(11.07.2011 в 11:02)
| | С каких пор и вследствие чего? | |
|
|
|
|
|
|
|
для: Гавриленко Дмитрий
(11.07.2011 в 11:43)
| | в следствии выхода новой версии MySQL
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions. | |
|
|
|