Я разрабатываю систему баз данных для своего работодателя, и часть этого включает в себя создание счетов-фактур. Я подумывал об идентификаторах 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, UNInvoiceLine(Галстуки продукты в счете-фактуре, чтобы строки.)
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?