У меня есть сценарий для создания базы данных для Java API Documentation, в которой я должен представить информацию о каждом классе и методе в данном фрагменте кода. Например, рассмотрим:Как создать базу данных для хорошо структурированной документации Java API?
1. main()
2. {
3. String foo="test";
4. foo.substring(1,2);
5. }
Здесь я должен показать документацию для класса String
и метод substring
из Java-документации (классы/методы могут быть любой действительный класс/метод).
Мои наблюдения:
Классы могут повторяться в различных пакетах, поэтому они не могут быть уникальными. То же самое касается методов. Имя метода foo()
может быть:
1) Метод этого класса
2) переопределяет метод некоторого родительского класса
3) Просто наследует метод.
С помощью этой информации, я следующие таблиц:
1)
CREATE TABLE "JAVACLASSDESCRIPTION"
( "CLASSFULLNAME" VARCHAR2(400) NOT NULL ENABLE,
"CLASSNAME" VARCHAR2(400),
"CLASSDEFINATION" CLOB,
"CLASSDECLARATION" CLOB,
"INHERITEDCLASSES" CLOB,
CONSTRAINT "JAVACLASSDESCRIPTION_PK" PRIMARY KEY ("CLASSFULLNAME") ENABLE
) ;
INHERITEDCLASSES
является многозначными attribute.I знают, что это действительно бедняжка, но у меня есть причины. 1) 1-й проверить, доступен ли метод в таблице JAVAMETHODDESCRIPTION
(либо как метод класса, либо метод переопределения). 2) Если нет, это должен быть метод, который наследуется для какого-либо родительского класса. Таким образом, мы должны показать документацию методы этого родителя class.To сохранить несколько поиска, значение INHERITEDCLASSES
содержит следующий образ (для некоторых случайного класса):
java.lang.Object: clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
так, что это родительский класс java.lang.Object
сопровождаемое список методов, так что легко совместить имя метода.
2) Выход
CREATE TABLE "JAVAMETHODDESCRIPTION"
( "CLASSFULLNAME" VARCHAR2(400) NOT NULL ENABLE,
"METHODNAME" VARCHAR2(400) NOT NULL ENABLE,
"METHODDECLARATION" VARCHAR2(400),
"METHODDEFINATION" CLOB
) ;ALTER TABLE "JAVAMETHODDESCRIPTION" ADD CONSTRAINT "JAVAMETHODDESCRIPTION_FK" FOREIGN KEY ("CLASSFULLNAME")
REFERENCES "JAVACLASSDESCRIPTION" ("CLASSFULLNAME") ON DELETE CASCADE ENABLE;
Пример:
Я знаю, что есть много дизайна issues.How я могу улучшить свой дизайн базы данных?
EDIT:
О многозначной записи, если разложить на другой стол может привести к излишним entries.For например. Object
класс супер класс для всех.
Как насчет их создания в качестве объектов? –
Я не уверен, что вы имеете в виду. это «их»? Как вы хотите хранить объекты в реляционной базе данных? – piotrek
Создайте вложенные объекты вместо многозначных атрибутов (сохранить как объект типа) –