Показать сообщение отдельно
  #8 (permalink)  
Старый 12.10.2008, 13:38
Аспирант
Отправить личное сообщение для EugenyK Посмотреть профиль Найти все сообщения от EugenyK
 
Регистрация: 17.03.2008
Сообщений: 64

У меня такой вопрос по поводу mySQL

Я создаю таблицу товарных позиций в двух вариантах.
Вариант А
Код:
CREATE TABLE positions (
	id			mediumint		not null auto_increment,
	cid			mediumint		not null default '1',
	date			int			not null default '0',
	name			varchar(255)	not null default 'Без названия',
	hidden		enum ('Y','N')	not null default 'N',
	price			mediumint		not null default '0',
	title_b		varchar(255)	not null default 'Без описания',
	title_f			mediumtext,
	PRIMARY KEY (id),
	KEY cid (cid),
	KEY name (name)
);
Вариант Б
Код:
CREATE TABLE positions (
	id			mediumint		not null auto_increment,
	cid			mediumint		not null default '1',
	date			int			not null default '0',
	name			varchar(255)	not null default 'Без названия',
	deleted		enum ('Y','N')	not null default 'N',
	hidden		enum ('Y','N')	not null default 'N',
	price			mediumint		not null default '0',
	title_b		varchar(255)	not null default 'Без описания',
	title_f			mediumtext,
	PRIMARY KEY (id),
	KEY cid (cid),
	KEY name (name)
);
Далее, при заполнении базы данных может возникнуть ситуация, когда нужно будет удалить какую-то запись. В варианте А действовать придётся через

DELETE FROM positions WHERE id = '{$id}'

В варианте Б можно просто

UPDATE positions SET deleted = 'Y' WHERE id = '{$id}'

При этому в варианте А после удаления данная строка будет стёрта и при следующем добавлении позиции она будет задействована, тем самым порядок нумерации по id-колонке будет нарушен.
Беспокоит, что иногда приходится пользоваться запросом типа

SELECT * FROM positions WHERE id = '{$id}' - увеличится ли время на поиск конкретной записи?

В варианте Б же новая запись будет размещаться в самом конце, при этом таблица будет конечно расти. И тут же надо учесть будет, что запрос по выбору определенных записей будет сложнее:

SELECT * FROM positions WHERE deleted = 'N' AND ...

Что интересует: какой из вариантов более разумнее с точки зрения сбережения времени на поиски записей - вариант А или вариант Б?
Ответить с цитированием