Вопрос дизайна таблицы SQLite - PullRequest
1 голос
/ 11 февраля 2010

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

Invoice Table
| InvoiceNumber | Department | DateOfBilling |

Теперь мне нужно как-то сохранить задания, связанные с этим счетом. Каждое задание имеет следующие переменные:

Job
| Date | ServiceDescription | Hours | Cost |

(Часы и стоимость не всегда являются прямым множителем, требующим обеих переменных)

Я новичок в работе с SQLite и базами данных в целом, но вот идеи, которые я пришел с. Одним из решений было бы добавить после даты выставления счета столбец, содержащий запись TEXT или BLOB, представляющую собой форматированную строку, которая должна быть размечена при извлечении из базы данных. Например:

| DateofBilling | Date;ServiceDescription;Hours;Cost!Date;...

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

Другая идея заключалась в том, чтобы добавить после даты выставления счета столбец, в котором просто содержался JobID. Затем создайте новую таблицу заданий, в которой хранятся все задания, и соответствующий идентификатор задания. Пример:

Invoice Table
| DateOfBilling | JobID

Job Table
| JobID | Date | ServiceDescription | Hours | Cost |

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

Спасибо за любую помощь, которую вы можете оказать.

1 Ответ

1 голос
/ 11 февраля 2010

Предполагая, что у вас также есть фиксированный список возможных описаний вакансий, вы можете использовать:

A Jobs reference table:
JobId, Description, BaseTimeEstimate ...

Invoice table:
InvoiceId, DepartmentId, DateOfBilling ...

Then an InvoiceDetail table:
InvoiceId, JobId, ActualHours, Cost ...

что-то в этом роде.

Для заданий, которые могут быть пользовательскими записями, работает более простая структура:

Invoice table:
InvoiceId, DepartmentId, DateOfBilling ...

Then an InvoiceDetail table:
InvoiceId, JobId, JobDescription, ActualHours, Cost ...

вот так.

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