# Wird auf den Eintrag referenziert?



## Kjatar (22. Jan 2009)

Hi Leute
Ich hab da ein problem bei meiner Datenbank... Naja, Problem ist vllt übertrieben, aber ich muss ne bessere Lösung finden.

Folgendes Szenario: Ich habe drei Tabellen, Company, Department, User
Company besitzt keine FK's
Department besitzt einen FK auf Company
User besitzt einen FK auf Department

Datenbanksystem ist postgresql

Im Java gibts für jedes Tabelle ein DAO und ein DTO. Für verschiedene Aktionen muss ich von einer Company wissen, ob irgendeine Zeile in Department auf die Company referenziert. Im moment habe ich das so gelöst, dass das CompanyDAO bei einem Select alle Departments ausliest und überprüft, ob eines davon auf die jeweilige Company refernziert. Ist nicht so die schönste Lösung und der falsche Ort für die Abfrage.

```
Company company = CompanyDAO.readById(id);
boolean children = false;
ArrayList<Department> departments = new DepartmentDAO().readAll();
if(departments != null) {
	for(Department d: departments){
		if(d.getCompanyId() == company.getId()) {
			used = true;
			break;
		}
	}
}
```
Eine weitere möglichkeit, die mir zur Zeit vorschwebt, ist eine seperate Methode im CompanyDAO hasChildren(Company c). In dieser würde das selbe passieren wie oben, nur halt ausgelagert. Das wäre dann zwar besser abgetrennt, allerdings wiederum nicht die schönste möglichkeit...

Meine Frage ist nun, ob es dafür vllt bessere Lösungen gibt. Möglicherweise ein DB Befehl, der zu einer bestimmten Zeile sagen kann, ob auf diese referenziert wird. Noch schöner, aber denke ich kaum dass das funktioniert, einen Befehl, denn man auf dem ResultSet ausführen kann, der das selbe durchführen würde.
Oder gibts da gar keine Möglichkeiten, um nicht selbst Zeile für Zeile aller möglichen Kinder durchzuschauen, ob jetzt irgendwo auf die Company referenziert wird...[/code]


----------



## ARadauer (22. Jan 2009)

???

select * from department where company_FK = 5

einfach in der tabelle schau ob der die company als fk vorkommt...


----------



## Kjatar (22. Jan 2009)

Ich hab im DAO leider vordefinierte Methoden, bedeutet, ich kann nicht nach jedem beliebigen Feld suchen... department kann ich nur gleichzeit nach FID und name durchsuchen oder nach der eigenen ID
Der MVC Patterns sollten so weit wie möglich berücksichtigt werden, also nicht einfach selbst ne abfrage mit eigenem SQL code schreiben sondern alle Abfragen über das DAO durchführen


----------



## maki (22. Jan 2009)

> Der MVC Patterns sollten so weit wie möglich berücksichtigt werden, also nicht einfach selbst ne abfrage mit eigenem SQL code schreiben sondern alle Abfragen über das DAO durchführen


Das hat alles gar nix mit MVC zu tun.

DAOs nutzt man für die DB Abfragen, wenn du eine zusätzliche Abfrage brauchst, dann sind die DAOs der richtige Ort dafür.


----------



## ARadauer (22. Jan 2009)

> Der MVC Patterns sollten so weit wie möglich berücksichtigt werden, also nicht einfach selbst ne abfrage mit eigenem SQL code schreiben sondern alle Abfragen über das DAO durchführen



ist das eine Schulaufgabe?
woher hast du das DAO?
Wer sagt den, dass man im DAO keinen eigenne SQL Code schreiben kann, das verletzt ja das MVC Pattern nicht...

Bietet das Department DAO kein getDepartmentByCompany....


----------

