Оба подошли бы работать.Если вы используете подход с одной таблицей, то столбец invoiceType будет вашим полем дискриминатора.В вашем отображении nHibernate это поле дискриминатора будет использоваться nHibernate, чтобы решить, какой тип (например, покупка или продажа) создать экземпляр для данной строки в таблице (см. Раздел 5.1.6 руководства по отображению nHibernate . Для специальных SQL-запросов или запросов отчетов вы можете создать два представления: одно для возврата только строк с invoiceType = purchase, а другое - только для строк, в которых invoiceType = sales.
В качестве альтернативы можно создать два отдельныхТаблицы, одна для покупки и одна для продажи. Как вы указали, эти две таблицы будут иметь почти идентичные схемы и файлы отображения nhibernate.
Если вы ожидаете очень большие объемы транзакций, вы можете разместить покупки ипродажи на двух разных физических дисках. С двумя разными таблицами это можно сделать, поместив их в разные файловые группы. С одной таблицей вы все еще можете сделать это, создав Секционированную таблицу SQL Server .пойти на эту неприятность, ты миЯ хочу оценить, действительно ли это необходимо, и доступ к столу с диска действительно станет узким местом для производительности.Вы не хотите тратить много времени на преждевременную оптимизацию, если в этом нет необходимости.
Я бы предпочел иметь одну таблицу со столбцом дискриминатора, чтобы лучше следовать принципам СУХОЙ.Если бы у меня не было четких чисел, указывающих на то, что это необходимо, я бы откладывал реализацию секционированной таблицы до тех пор, пока это не станет необходимым.