2016-05-23 3 views
0

Я разрабатываю систему баз данных для своего работодателя, и часть этого включает в себя создание счетов-фактур. Я подумывал об идентификаторах auto-increment на моих таблицах и в какой степени мне нужно делать скидки на рост бизнеса. Я использую InnoDB, потому что система будет очень всеобъемлющей, и многие записи будут обновлены.Форвардное планирование для SQL-счета Auto-increment

упрощено, вот что я в настоящее время:

Офис(Офис/магазин бизнеса В настоящее время 2.).
office_id (PK) INT, AI, UN

Счет
invoice_no (PK) INT, AI, UN
office_id (FK) (Где счет-фактура возникла из.)

Продукты
product_id (PK) INT, AI, UN

InvoiceLine(Галстуки продукты в счете-фактуре, чтобы строки.)
invoice_line_id (PK) INT, AI, UN
invoice_no (FK)
product_id (FK)
количество

Во-первых, хотя у меня, вероятно, никогда не закончится количество счетов-фактур, я задаюсь вопросом, может ли быть лучший способ приблизиться к этому, просто у вас возникнет непредвиденное расширение офисов и увеличение продаж. Как бы справиться с этой крупной компанией с 50+ магазинами? У каждого магазина, вероятно, будет свой собственный набор номеров счетов, начиная с 1?

Это то, что я рассмотрел ...

Вариант 1 - Должно ли я сделать invoice_no больше, чем стандартная 10 точности? Независимо от сложности, можно ли это изменить после развертывания, если мы увидим, что текущий предел будет недостаточным или это невозможно/очень проблематично?

Вариант 2 - Простите мое невежество, но возможно ли иметь базу данных, состоящую из таблиц с разными типами двигателей? Насколько я понимаю, в MyISAM таблица счетов может иметь составной ключ office_id и invoice_no, где автоматически увеличивающееся число будет увеличиваться отдельно для каждого офиса. Это правда и жизнеспособно?

Вариант 3 - Могу ли я создать новые таблицы на вставке нового офиса? Создать таблицу InvoiceX & InvoiceXLine, где X является office_id?

Есть ли лучший, более простой метод, о котором я просто не думал?

Во-вторых, если бизнес расширяется, и мы составляем в среднем 30 + строк на счет-фактуру, возможно, что invoice_line_ids закончится в долгосрочной перспективе.Поэтому для этого мне, вероятно, понадобится аналогичное решение, за исключением варианта 3 выше (создание таблицы InvoiceLineX для каждого invoice_no) было бы совершенно непрактичным в этом случае.

Могу ли я просто сделать первичный ключ для таблицы InvoiceLine составной частью invoice_no и product_id?

ответ

0

Это деловой вопрос. Пока вы не знаете, как они собираются отправлять счета-фактуры, почему вы догадались? Тем не менее, если бы я должен был следить за будущим, я бы сохранил несколько отдельных идентификаторов.

  • Мастер, магическое число, что только последовательный уникальный идентификатор, который столь же большой, как вам нужно (может быть, INT, может быть, больше, в зависимости от размера вашего бизнеса),
  • столбец «счет-фактура составитель» является магазин (или что-то еще), которое сгенерировало его,
  • еще один столбец для «Идентификатор объекта обработки счета», являющийся офисом магазина/счетов, который выдал/должен был решить его на протяжении всего жизненного цикла.

Это дает вам больше гибкости, если вы имеете, скажем, большую часть магазина в состоянии обрабатывать все счета-фактуры в этом состоянии. Конечно, это догадки!

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

Используйте свое воображение (или бизнес-аналитик) о том, что еще вы можете сохранить &.

Невозможно помочь вам с типами БД.

У нет есть одна таблица на место/счет-фактуру. Это сосало бы большое время.

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

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

Я думаю, что короткий ответ идет с более или менее то, что у вас есть, если оно не окажется неправильным. Все ваши предложения связаны с проблемами, которые вы либо не знаете ответа, либо не произойдете.

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